﻿using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.EGlobal
{
    /// <summary>
    /// Wuc tareas 
    /// </summary>
    public partial class wucTareas : ucWuc
    {
        
        protected String FaseId
        {
            get
            {

                return this.hdFase.Text;
            }

        }
        protected String TablaId
        {
            get
            {

                return this.hdIdTabla.Text;
            }

        }       
        
        protected String Tabla
        {
            get
            {

                return this.hdTable.Text;
            }

        }
       
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!X.IsAjaxRequest)
                {
                  
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        private void Wuc_Init()
        {
            EnabledBtnNuevoTarea();            
            BindDataTarea();         
        }
        private void EnabledBtnNuevoTarea()
        {
            try
            {
             
                if (Tabla!= "")
                {
                    this.btnForm.Enable();
                }
                else
                {
                    this.btnForm.Disable();
                }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        /// <summary>
        /// Buscar los directores y subdirectores asignados, y cambia propiedad S a asignados en fase anterior
        /// </summary>
        /// <returns></returns>
        private TecnicoLista findListaTecnicos()
        {
            TecnicoLista listaTecnicosNow = TecnicoLista.GetTecnicoLista(this.hdJefatura.Text);
            TareaLista listaTareas = null;
            //Obtener la fase anterior a la actual
            FaseLicenciamientoLista itemsFases = FaseLicenciamientoLista.GetFaseLicenciamientoLista(Guid.Parse(this.hdExpediente.Text));
            //Actualizar estado actual
            FaseLicenciamientoInfo faseFinalizada = itemsFases.FirstOrDefault(r => r.EstadoFase == Valores.Codigo_Estado_Fase_Finalizado);
            if (faseFinalizada != null)
            {
                //Llenar datos de directores y subdirectores
                ModuloCriteria tareaCriteria = ModuloCriteria.NewModuloCriteria();
                tareaCriteria.Id = faseFinalizada.Id.ToString();
                tareaCriteria.Modulo = Valores.Modulo_Tarea_Licenciamiento;
                //Obtener lista de tecnicos de la fase anterior
                listaTareas = TareaLista.GetTareaLista(tareaCriteria);

                foreach (TareaInfo personAsig in listaTareas)
                {
                    TecnicoInfo perFind = listaTecnicosNow.FirstOrDefault(r => r.Id == personAsig.TecnicoId);
                    if (perFind != null)
                    {
                        perFind.Asignado = "S";
                    }
                }


            }
            return listaTecnicosNow;
        }
        public void InitWuc(string IdFase, string IdTabla, string Tabla,string Jefatura,string expediente)
        {
            this.hdFase.SetValue(IdFase);
            this.hdIdTabla.SetValue(IdTabla);
            this.hdTable.SetValue(Tabla.Replace("DOC", "TAR"));
            this.hdJefatura.SetValue(Jefatura);
            this.hdExpediente.SetValue(expediente);
            Wuc_Init();
        }
        public int GetCountTareas()
        {
            ModuloCriteria tareaCriteria = ModuloCriteria.NewModuloCriteria();
            tareaCriteria.Id =  (Tabla == Valores.Modulo_Tarea_Expediente) ? this.hdExpediente.Text : TablaId;
            tareaCriteria.Modulo = Tabla;
            TareaLista lista= TareaLista.GetTareaLista(tareaCriteria);
            return (lista.Count());
        }

        #region Tarea

        [DirectMethod(IDAlias = "wucTarea")]
        public TecnicoLista BindDataTecnicos()
        { 
            try
            {
                return findListaTecnicos(); 
            
            }
             catch (Exception ex)
             {
                 RegistrarLog("BindDataTecnicos " + ex);
             }
             return null;
        }

        private void BindDataTarea()
        {
            try
            {
                if (Tabla != "")
                {
                    var tareaCriteria = ModuloCriteria.NewModuloCriteria();
                    tareaCriteria.Id = (Tabla == Valores.Modulo_Tarea_Expediente) ? this.hdExpediente.Text : TablaId;
                    tareaCriteria.Modulo = Tabla;
                    this.stoTarea.DataSource = TareaLista.GetTareaLista(tareaCriteria);
                    this.stoTarea.DataBind();
                }
               
              }
            catch (Exception ex)
            {
                RegistrarLog("BindDataTarea " + ex);
            }
        }
        /// <summary>
        /// Elimnar item de tarea
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnEliminar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                var id = Guid.Parse(e.ExtraParams["hddTecDelId"]);
                Tarea objTar = Tarea.GetEditableRoot(id, Tabla);
                objTar.Delete();
                objTar.Save();

                BindDataTarea();
                //gpTarea.Refresh();

            }
            catch (Exception ex)
            {
                RegistrarLog("btnEliminar_Click " + ex);
            }


        }
        /// <summary>
        /// Crear/Modificar tareas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnGuardar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                Tarea objTar = Tarea.NewEditableRoot(Tabla);
                string msgOperacion = "";
                if (e.ExtraParams["hddId"] == "")
                {
                    msgOperacion = "creada";
                    objTar.Id = System.Guid.NewGuid();
                }
                else
                {
                    msgOperacion = "modificada";
                    objTar = Tarea.GetEditableRoot(Guid.Parse(e.ExtraParams["hddId"]), Tabla);
                }
                String _sesper = GetSessionUsuario.PersonaId;
                Guid _id = Guid.Parse(_sesper);
                JefeDepartamental jefeDepar = JefeDepartamental.GetEditableRoot(_id);
                if (jefeDepar.PersonaId == "")
                {
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = "Estado",
                        Message = string.Format("{0}", "Usuario que asigna tarea no tiene rol Jefe Departamental")
                    });
                }
                else
                {
                    objTar.Tipo = Tabla;
                    objTar.JefeId = jefeDepar.Id.ToString();                   
                    objTar.IdFase = TablaId;//
                    objTar.IdAuditoria = objTar.IdFase;//
                    objTar.Asunto = e.ExtraParams["txtAsunto"];
                    objTar.Descripcion = e.ExtraParams["txtDesc"];
                    objTar.TecnicoId = e.ExtraParams["ddfTecnico"];
                    objTar.FechaInicio = Convert.ToDateTime(e.ExtraParams["dfFechaInicio"]);
                    objTar.FechaFin = Convert.ToDateTime(e.ExtraParams["dfFechaLimite"]);
                    objTar.Responsable  = e.ExtraParams["rdg_resp"];
                    objTar.ExpedienteId = this.hdExpediente.Text;
                    objTar.Save();

                    BindDataTarea();
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon = MessageBox.Icon.INFO,
                        Title = "Estado",
                        Message = string.Format("{0} <b>{1}</b> {2}", "Tarea", objTar.Asunto, msgOperacion)
                    });
                }

            }
            catch (Exception ex)
            {
                RegistrarLog("btnGuardar_Click " + ex);
            }
        }
        #endregion

       
    }
}